前言
因为产品线也一直也在提要不要将ArcGIS For Android 版本从10.2.9版本过渡到100.*版本,也有过尝试,也就是Kotlin+ArcGIS 100.2版本的基线产品研发。慢慢这个方面交到了我手上,交到我手上的时候大部分功能都已经完善了,我只是进行了一些小的模块开发而已。目前这个产品已经具备了基线的基本功能与使用。回顾看来,新老版本差异也比较大。所以写这么一篇文章来对比较关注的部分进行简单的比较与讲解。
这篇文章的大多数来源于ArcGIS官网的一些向导和ArcGIS博客的一些文章,部分链接需要自备梯子。
https://developers.arcgis.com/arcgis-runtime/choosing-the-right-version/
https://www.esri.com/arcgis-blog/products/arcgis-online/3d-gis/arcgis-runtime-sdk-100-0-has-arrived/
https://developers.arcgis.com/android/latest/guide/performance-considerations.htm
https://developers.arcgis.com/android/latest/guide/migrate-to-100-x-from-10-2-x.htm
100.* 版本的改动
这里我们在将100.*版本基本讲的为100.3和100.4版本,因为100.0、100.1以及100.2(开始用的这个版本,在ImageLayer的查询上差点没把我坑死)出现的问题较多且不完整。
100版本的最大改动为架构改动,100版本是新架构Runtime API系列,这种架构相当于无原有架构基础,从头开始重新设计。这种新架构支持新功能和性能优化,并在所有Runtime SDK中提供一致的API和功能。整个API经过重新设计,融合了所有ArcGIS Runtime SDK的新功能和创新理念。这就意味着我们在进行从10.2版本向100版本迁移的时候,需要较大幅度的跨动,也就是要了解的API不同,实现同一个目的所使用的方法与过程也会不同。另外对于一些比较实质的功能在有增加与移除,官方给出了一个表格。
Capability | in 10.2.x | in 100.3 |
---|---|---|
Web maps – edit and save | No | Yes |
ImageService layers | Yes | Yes |
Vector basemaps | No | Yes |
Local raster | No | Yes |
3D visualization | No | Yes |
WMS layers | Yes | Yes |
WMTS layers | Yes | Yes |
Group Layers | Yes | Some SDKs |
Time-aware layers | Yes | No |
Mobile Map Packages | No | Yes |
Bing layers | Yes | Yes |
OpenStreetMap layers | Yes | Yes |
Find Task | Yes | No |
Geographic Transformations | Yes | Yes |
Related Tables | Yes | Yes |
性能方面
这个方面也是我们比较关注的一个方面,在地图加载或者图层渲染方面有没有性能相关的提升。本来想用一些测试工具测一下,但具体一想,不同的设备硬件不同,另外地图的加载会有当前设备GPU当前渲染状态的差异以及网络访问的延迟等问题。且测试机只有一两台,不具有说明力度。顾希望从官方文档中得到一些相关数据或者信息。但是官方只是提到了一句:
但是并没有提供具体的性能提升方面的数据比较。不过在Vector tiled basemaps这种类型的底图上,官方表示
从官方给出的这么隐晦的表达来想,这个新版本的更新力度并不在性能方面,或者说性能上有提升,但提升并不明显。不过在新架构中,对于操作图层和业务图层等结构分明的情况下,官方也给出了性能优化方面的文档(100.4版本文档)
具体内容参考开头给出的第三个链接,或者点击这里。
重点功能点变化
可装载化(Loadable)
Loadable interface是在100.0.0推出的。其设计和目的适用于那些涉及通过连接在线资源并且通过网络访问大量数据的工作流程(这点也就是我们产品线中的主要加载模式)。异步加载元数据的所有资源以初始化其状态(例如地图,图层和任务)都采用可加载模式。这个模式使加载状态的行为更加一致和明确。可装入资源不会自动加载其状态。这些在应用程序代码加载时会延迟加载,或者由依赖于它们的其他对象加载。这对于我们需要从地图资源获取信息而不必首先将其可视化的情况非常有用。我们可以显式加载地图资源,而无需先将其与地图视图相关联。可以轻松监视可加载资源的状态以确定它是否正在加载,已成功加载,或无法加载。如果资源由于transient或recoverable condition而无法加载,我们就可以重试加载它。
图形叠加问题
之前我们在10.2.9版本常常会因为图层加载顺序问题或者由于网络延迟问题导致绘制图层(graphicLayer)在专题服务之下,导致绘制或者高亮效果出现问题。这点在100版本完美解决。也就是GraphicOverlay会固定在OperationLayer之上,官方给出的:
并且同100.x版本,有一种更简单识别图形叠加内的图形的模式。GeoView(二维MapView或三维SceneView)上的identifyGraphicsOverlayAsync方法识别指定图形覆盖中靠近提供的屏幕点的可见图形。直接传递屏幕坐标点即可。
查询问题
相比10.2.9版本使用三大查询,并且不同的查询的方式以及结果存在差异,以至于在线和离线查询看似使用一个模块,但确实两种路线与处理逻辑,在代码复用上的效率较低。
100.*版本对于在线和离线(我们使用的是Imagelayer与Geodatabase数据)查询的逻辑和结果是一致的,尽管中途调用的方法与操作对象不同,但是对于搜索参数的设置、搜索异步逻辑的处理以及搜索结果的处理可以复用同一套代码。但是习惯使用了10.2版本的搜索方法之后,在进行100版本的搜索会带来一些不便。
结语
这里也只对一些比较重要的部分进行官方与我对产品线的理解综合之后给出的一些观点或看法,内容不局限于这些,因为版本变动比较多,以及在使用新版本踩得坑比较多,但都是一些小的方面,在这里就不一一细解了。希望这篇文章能对新版本持有困惑的人带来一些对于版本选择的小帮助吧。